//给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数，使得它们的和与 target 最接近。返回这三个数的和
//。假定每组输入只存在唯一答案。 
//
// 
//
// 示例： 
//
// 输入：nums = [-1,2,1,-4], target = 1
//输出：2
//解释：与 target 最接近的和是 2 (-1 + 2 + 1 = 2) 。
// 
//
// 
//
// 提示： 
//
// 
// 3 <= nums.length <= 10^3 
// -10^3 <= nums[i] <= 10^3 
// -10^4 <= target <= 10^4 
// 
// Related Topics 数组 双指针 
// 👍 638 👎 0


//leetcode submit region begin(Prohibit modification and deletion)

import java.util.Arrays;

class Solution {
    public int threeSumClosest(int[] nums, int target) {
        Arrays.sort(nums);
        int sum=nums[0]+nums[1]+nums[2];
       for (int i = 0; i < nums.length; i++) {
            int L=i+1;
            int R=nums.length - 1;
            while (L<R) {
                int result=nums[R]+nums[L]+nums[i];
                if(Math.abs(target-result)<Math.abs(target-sum)){//判断谁更接近 因为可能比它大 比它小 所以要使用绝对值
                    sum=result;
                }
                if(result>target) R--;//使用result进行比较 因为每次进行指针移动时是result
                else if(result<target) L++;
                else return sum;
            }

        }
        return sum;

    }
}


//leetcode submit region end(Prohibit modification and deletion)
